package com.chunfeng.lerunapplication.dialog;

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.chunfeng.lerunapplication.R;

import java.util.Objects;

/**
 * 验证弹窗
 *
 * @author by 春风能解释
 * <p>
 * 2023/12/4
 */
public class VerifyDialog extends Dialog implements View.OnClickListener {
    /**
     * 标题
     */
    private TextView title;
    /**
     * 消息
     */
    private TextView message;
    /**
     * 确定按钮
     */
    private Button okButton;
    /**
     * 取消按钮
     */
    private Button cancelButton;
    /**
     * 标题
     */
    private String titleStr;
    /**
     * 消息
     */
    private String messageStr;
    /**
     * 确定按钮点击
     */
    private OkButtonOnClickListener okButtonOnClickListener;
    /**
     * 取消按钮点击
     */
    private CancelButtonOnClickListener cancelButtonOnClickListener;

    /**
     * 带参构造
     *
     * @param context 应用上下文
     */
    public VerifyDialog(@NonNull Context context) {
        super(context);
    }

    /**
     * 设置确定按钮的点击事件
     *
     * @param okButtonOnClickListener 点击事件
     * @return 当前对象
     */
    public VerifyDialog setOkButtonOnClickListener(OkButtonOnClickListener okButtonOnClickListener) {
        this.okButtonOnClickListener = okButtonOnClickListener;
        return this;
    }

    /**
     * 设置取消按钮的点击事件
     *
     * @param cancelButtonOnClickListener 取消事件
     * @return 当前对象
     */
    public VerifyDialog setCancelButtonOnClickListener(CancelButtonOnClickListener cancelButtonOnClickListener) {
        this.cancelButtonOnClickListener = cancelButtonOnClickListener;
        return this;
    }

    /**
     * 设置标题
     *
     * @param title 标题
     * @return 当前对象
     */
    public VerifyDialog setTitle(String title) {
        this.titleStr = title;
        return this;
    }

    /**
     * 设置消息
     *
     * @param message 消息
     * @return 当前对象
     */
    public VerifyDialog setMessage(String message) {
        this.messageStr = message;
        return this;
    }

    /**
     * 当弹窗被创建时
     *
     * @param savedInstanceState 状态
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_dialog);
        initView();
        initData();
    }

    /**
     * 初始化数据
     */
    private void initData() {
        title.setText(titleStr);
        message.setText(messageStr);
    }

    /**
     * 初始化组件
     */
    private void initView() {
        title = findViewById(R.id.Dialog_Title);
        message = findViewById(R.id.Dialog_Message);
        okButton = findViewById(R.id.Update_Submit);
        cancelButton = findViewById(R.id.Update_Cancel);
        okButton.setOnClickListener(this);
        cancelButton.setOnClickListener(this);
    }

    /**
     * 显示弹窗
     */
    @Override
    public void show() {
        super.show();
    }

    /**
     * 按钮点击事件
     *
     * @param v 点击的元素
     */
    @Override
    public void onClick(View v) {
        int id = v.getId();
        //确定按钮点击
        if (id == R.id.Update_Submit && Objects.nonNull(okButtonOnClickListener)) {
            okButtonOnClickListener.setOkButtonOnClickListener(this);
        }
        //取消按钮点击
        if (id == R.id.Update_Cancel && Objects.nonNull(cancelButtonOnClickListener)) {
            cancelButtonOnClickListener.setCancelButtonOnClickListener(this);
        }
    }

    /**
     * 关闭弹窗
     */
    @Override
    public void dismiss() {
        super.dismiss();
    }

    /**
     * 确定按钮事件接口
     */
    public interface OkButtonOnClickListener {
        /**
         * 确定按钮点击定义
         *
         * @param dialog 弹窗对象
         */
        void setOkButtonOnClickListener(VerifyDialog dialog);
    }

    /**
     * 取消按钮事件接口
     */
    public interface CancelButtonOnClickListener {
        /**
         * 取消按钮事件定义
         *
         * @param dialog 弹窗
         */
        void setCancelButtonOnClickListener(VerifyDialog dialog);
    }
}
